@REM 扫描用户输入的网段下的所有IP是否可以通信
@REM 比如用户输入 192.168.1.0
@REM 需要连续扫描 192.168.1.1~255的所有IP
@REM 判断是否可以通信
@REM 这是一个 .bat 脚本

@REM 关闭命令回显
@echo off

@REM 清除屏幕
cls

@REM 修改编码为UTF-8
chcp 65001

@REM 显示当前时间
echo 当前时间： %date% %time%

echo 程序开始执行...

@REM 获取用户输入的网段

set /p STR=请输入网段:

@REM 检查用户输入是否符合格式，将字符串以点号分割为四个部分
echo 正在验证输入的网段格式...
for /f "tokens=1-4 delims=." %%a in ("%STR%") do (
  set ip1=%%a
  set ip2=%%b
  set ip3=%%c
  set ip4=%%d
)

@REM 检查是否成功提取了四个部分
if not defined ip4 (
  echo 输入的网段格式不正确，请确保格式为 A.B.C.D
  pause
  exit /b
)

@REM 提取网段的前三个部分（例如 1.1.22）
set subSTR=%ip1%.%ip2%.%ip3%

@REM 启用延迟变量扩展
setlocal enabledelayedexpansion

@REM 设置起始和结束IP地址
set start=!subSTR!.1
set end=!subSTR!.255

@REM 循环扫描每个IP
echo 正在扫描 !start! 到 !end! 的所有IP地址...

for /L %%i in (1, 1, 255) do (
  @REM 构造完整的IP地址
  set strIP=!subSTR!.%%i
  
  echo strIP=!strIP!
  
  @REM @REM 使用ping命令测试IP地址是否可达
  ping -n 1 -w 5 !strIP!
  @REM @REM 检查ping命令的返回值
  if !errorlevel! equ 0 (
    echo !strIP! 是可达的
    ) else (
    echo !strIP! 不可达
  )
)

echo 扫描完成。

@REM 结束延迟变量扩展
endlocal
